#ifndef TABLESYMBOLES_H_
#define TABLESYMBOLES_H_

#include "SymboleValue.h"
#include <vector>
#include <iostream>
using namespace std;

/*! \file TableSymboles.h
    \brief La spécification de la classe TableSymboles
    \author Cedric Vierne et Sergio Vasquez
    \date 18.04.2011
 */

/*! \class TableSymboles
    \brief La classe représentant de cnstruire une table de symboles.
 */

class TableSymboles {
public:
    
    /*! \fn TableSymboles
        \brief Permet de construire une table vide de pointeurs sur des symboles valués
    */ 
    TableSymboles();
    
    /*! \fn SymboleValue * chercheAjoute (Symbole s)
        \brief  Si s est identique à un symbole valué déjà présent dans la table, on renvoie un pointeur sur ce symbole valué.
         Sinon on insère un nouveau symbole valué correspondant à s et on renvoie un pointeur sur le nouveau symbole valué inséré
        \param s
    */ 
    SymboleValue * chercheAjoute (Symbole s);
      
    friend ostream & operator << (ostream & cout, TableSymboles ts); // affiche ts sur cout

private:
    vector<SymboleValue *> table; // la table des symboles valués, triée sur la chaine
};

#endif /* TABLESYMBOLES_H_ */
